#include<bits/stdc++.h>
#define N 800000
#define ll long long
using namespace std ;

bool hh1;

inline int read(){
	int s=0,w=1;char c=getchar();
	while(c<48||c>57) {if(c=='-') w=-1;c=getchar();}
	while(c>=48&&c<=57) s=(s<<1)+(s<<3)+c-48,c=getchar();
	return s*w;
}

inline void write(ll x){
	if(x>9) write(x/10);
	putchar(x%10+48);
}

int n,maxc;
struct node{int y,c,i;}e[N+100];
vector<node> a[N+100];
bool vis[N+100];ll ans[N+100];

int f[N+100];
void dfs(int x,int fa){
	f[x]=fa;
	for(int i=0;i<a[x].size();i++){
		int y=a[x][i].y;if(y==fa) continue;
		dfs(y,x);
	}
}

int dp[N+100][23],ff[N+100][23];
ll tmp;
void getdp(int x,int fa){
	dp[x][maxc+1]=1;
	for(int i=0;i<a[x].size();i++){
		int y=a[x][i].y,c=a[x][i].c;
		if(y==fa||vis[a[x][i].i]) continue;
		getdp(y,x);
		for(int j=0;j<=maxc+1;j++)
			dp[x][min(j,c)]+=dp[y][j];
	}
}
void gettmp(int x,int fa){
	for(int i=0;i<a[x].size();i++){
		int y=a[x][i].y,c=a[x][i].c;
		if(y==fa||vis[a[x][i].i]) continue;
		for(int j=0;j<=maxc+1;j++)
			dp[x][min(j,c)]-=dp[y][j];
		for(int j=0;j<=maxc+1;j++)
			ff[y][min(j,c)]+=ff[x][j]+dp[x][j];
		for(int j=0;j<=maxc+1;j++)
			dp[x][min(j,c)]+=dp[y][j];
		gettmp(y,x);
	}
	for(int i=1;i<=maxc;i++) tmp+=(dp[x][i]+ff[x][i])*i;
}


ll sum1[23],sum2[23];
void getans(int x,int fa){
	for(int i=0;i<a[x].size();i++){
		int y=a[x][i].y,ii=a[x][i].i,c=a[x][i].c;
		if(y==f[x]) continue;
		
		ans[ii]=tmp/2;
		
		sum1[0]=dp[y][0],sum2[0]=0;
		for(int k=1;k<=maxc+1;k++)
			sum1[k]=sum1[k-1]+dp[y][k],
			sum2[k]=sum2[k-1]+dp[y][k]*k;
		
		for(int j=0;j<=maxc;j++)
			ans[ii]-=(sum1[maxc+1]-sum1[j])*ff[y][j]*j,
			ans[ii]-=sum2[j]*ff[y][j];

		getans(y,x);
	}
}

int b[N+100],v[N+100],id[N+100];
ll pre[N+100],dpp[2][23];
bool l,r;

bool hh2;

int main(){

	freopen("tatooine.in","r",stdin);
	freopen("tatooine.out","w",stdout);

	n=read();
	for(int i=1;i<n;i++){
		int x=read(),y=read(),c=read();
		e[i]=(node){x,y,c};
		a[x].push_back((node){y,c,i});
		a[y].push_back((node){x,c,i});
		maxc=max(maxc,c);
	}
	
	dfs(1,0);

	if(n<=2000){
		for(int i=1;i<n;i++){
			vis[i]=1,tmp=0;
			for(int j=1;j<=n;j++) 
				memset(dp[j],0,sizeof(dp[j])),
				memset(ff[j],0,sizeof(ff[j]));
			
			int x=e[i].y,y=e[i].c;
			if(f[y]==x) swap(x,y);
			getdp(1,0),gettmp(1,0);
			getdp(x,0),gettmp(x,0);
			
			vis[i]=0,write(tmp/2),puts("");
		}
//		cout<<abs((&hh1)-(&hh2))<<endl;
		return 0;
	}
	
	
	bool kk=0;int pos=0;
	for(int i=1;i<=n;i++) {
		if(a[i].size()>2) {kk=1;break;}
		if(a[i].size()==1) pos=i;
	}
	if(!kk){
		
		b[1]=pos;
		for(int i=1;i<n;i++){
			for(int j=0;j<a[b[i]].size();j++){
				int y=a[b[i]][j].y;
				if(y==b[i-1]) continue;
				b[i+1]=y,v[i]=a[b[i]][j].c,id[i]=a[b[i]][j].i;
			}
		}
		
		dpp[l][maxc+1]=1,tmp=0;
		for(int i=n-1;i>=1;i--){
			r=l^1;
			memset(dpp[r],0,sizeof(dpp[r]));
			
			for(int j=0;j<=maxc+1;j++)
				dpp[r][min(j,v[i])]+=dpp[l][j];
			dpp[r][maxc+1]++;
			for(int j=1;j<=maxc;j++) pre[i]+=dpp[r][j]*j;
			tmp+=pre[i];
			
			l=r;
		}
		
		memset(dpp,0,sizeof(dpp));
		l=r=0;
		for(int i=1;i<n;i++){
			r=l^1;
			memset(dpp[r],0,sizeof(dpp[r]));
			
			for(int j=0;j<=maxc+1;j++)
				dpp[r][min(j,v[i-1])]+=dpp[l][j];
			dpp[r][maxc+1]++;
			for(int j=1;j<=maxc;j++) tmp+=dpp[r][j]*j;
			tmp-=pre[i],ans[id[i]]=tmp;
			
			l=r;
		}
		
		for(int i=1;i<n;i++) write(ans[i]),puts("");
		return 0;
	}
	
	
	getdp(1,0),gettmp(1,0);
	getans(1,0);
	for(int i=1;i<n;i++) write(ans[i]),puts("");

	return 0;
}



